/*-------------------<-- Start of Description-->---------------------\ | List the variable names respectively. | |---------------------<-- End of Description-->----------------------| |--------------------------------------------------------------------| |-----------<-- Start of Files or Arguements Needed-->---------------| | Arguments: | | ListOfVariables - list of variables; | |-----------------<-- End of Arguements Needed-->--------------------| |--------------------------------------------------------------------| |------------------<-- Start of Files Created-->---------------------| | Example: %put %listvar(var1 var3 var4-var10 test); | | Usage: %put %listvar(var1 var3 var4-var10 test); | \-------------------<-- End of Files Created-->---------------------*/ %macro listvar/parmbuff; /*--------------------------------------------\ | Copy Right: Duo Zhou; | | Created: 7-06-2002 9:20pm; | | Purpose: List all variables; | \--------------------------------------------*/ %let syspbuff=%debracket(&syspbuff); %let _allvars_=; %if (%length(%bquote(&syspbuff)) gt 0) %then %do; %if (%index(%quote(&syspbuff), %quote(,))) %then %let _vardlm_=%quote(,); %else %let _vardlm_=%quote( ); /*Add some code to recognize the format of var10-var20, replace with var10 var11 ... var20*/ %if (%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(&syspbuff))))), %str(%()) and %index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(&syspbuff))))), %str(%()) lt 2) %then %do; %let syspbuff=%substr(%quote(%trim(%left(&syspbuff))), 2, %eval(%length(%quote(%trim(%left(&syspbuff))))-2)); /* %let syspbuff=%sysfunc(translate(%quote(&syspbuff), ' ', ','));*/ %end; %if (%sysfunc(index(%quote(&syspbuff),_ALL_))) %then %let syspbuff=*; %else %if (%sysfunc(index(%quote(%upcase(&syspbuff)),_CHARACTER_))) %then %do; %if (%sysfunc(exist(&indata))) %then %do; %let _indsid_=%sysfunc(open(&indata)); %let _innvars_=%sysfunc(attrn(&_indsid_,NVARS)); %let _convar_=; %do _invari_=1 %to &_innvars_; %let _invtype_=%sysfunc(vartype(&_indsid_, &_invari_)); %if (not %index(%quote(%upcase(&_invtype_)),%quote(N))) %then %do; %let _convar_= %trim(%left(&_convar_)) %sysfunc(varname(&_indsid_,&_invari_)); %end; %end; %let _invrc_=%sysfunc(close(&_indsid_)); %let syspbuff=&_convar_; %end; %end; %else %if (%sysfunc(index(%quote(%upcase(&syspbuff)),_NUMERIC_))) %then %do; %if (%sysfunc(exist(&indata))) %then %do; %let _indsid_=%sysfunc(open(&indata)); %let _innvars_=%sysfunc(attrn(&_indsid_,NVARS)); %let _convar_=; %do _invari_=1 %to &_innvars_; %let _invtype_=%sysfunc(vartype(&_indsid_, &_invari_)); %if (%index(%quote(&_invtype_),%quote(N))) %then %do; %let _convar_= %trim(%left(&_convar_)) %sysfunc(varname(&_indsid_,&_invari_)); %end; %end; %let _invrc_=%sysfunc(close(&_indsid_)); %let syspbuff=&_convar_; %end; %end; %else %do; %let _convar_=; %do %while(%index(%quote(&syspbuff), %str(-))); %let _sub1var_=%substr(%quote(&syspbuff), 1, %eval(%index(%quote(&syspbuff), %str(-))-1)); %let syspbuff=%substr(%quote(&syspbuff), %eval(%index(%quote(&syspbuff), %str(-))+1), %eval(%length(&syspbuff)-%index(%quote(&syspbuff), %str(-)))); %let _tmpvari_=0; %do %while(%length(%nrbquote(%scan(%nrbquote(&_sub1var_), %eval(&_tmpvari_+1), %nrbquote(&_vardlm_))))); %let _tmpvari_=%eval(&_tmpvari_+1); %let _tmp1var_=%nrbquote(%qscan(%nrbquote(&_sub1var_), &_tmpvari_, %%nrbquote(&_vardlm_))); %if (%length(%nrbquote(%scan(%nrbquote(&_sub1var_), %eval(&_tmpvari_+1), %nrbquote(&_vardlm_))))) %then %do; %if (%quote(&_convar_) eq) %then %let _convar_=%trim(%quote(%left(%quote(&_tmp1var_)))); %else %let _convar_=%trim(%quote(%left(%quote(&_convar_))))%quote(&_vardlm_)%trim(%quote(%left(%quote(&_tmp1var_)))); %end; %else %if ( %eval(%sysfunc(rxmatch(%sysfunc(rxparse($- ($a|_))),%quote(&_tmp1var_)))+1)) %then %do; %let _arrvarbeg_=%substr(%quote(&_tmp1var_), %eval(%sysfunc(rxmatch(%sysfunc(rxparse($- ($a|_))),%quote(&_tmp1var_)))+1), %eval(%length(&_tmp1var_)- %eval(%sysfunc(rxmatch(%sysfunc(rxparse($- ($a|_))),%quote(&_tmp1var_)))))); %if (%sysfunc(rxmatch(%sysfunc(rxparse($- ($a|_))),%quote(&_tmp1var_))) ge 1) %then %let _arrvarbroot_=%substr(%quote(&_tmp1var_), 1, %sysfunc(rxmatch(%sysfunc(rxparse($- ($a|_))),%quote(&_tmp1var_)))); %else %let _arrvarbroot_=; %if (%quote(&syspbuff) ne) %then %do; %let _tmp2var_=%nrbquote(%qscan(%nrbquote(&syspbuff), 1, %%nrbquote(&_vardlm_))); %if (%sysfunc(rxmatch(%sysfunc(rxparse($d $s)),&_tmp2var_))) %then %do; %let _arrvarend_=%substr(%quote(&_tmp2var_), %eval(%sysfunc(rxmatch(%sysfunc(rxparse($- ($a|_))),%quote(&_tmp2var_)))+1), %eval(%length(&_tmp2var_)- %eval(%sysfunc(rxmatch(%sysfunc(rxparse($- ($a|_))),%quote(&_tmp2var_)))))); %if (%sysfunc(rxmatch(%sysfunc(rxparse($- ($a|_))),%quote(&_tmp2var_))) ge 1) %then %let _arrvareroot_=%substr(%quote(&_tmp2var_), 1,%sysfunc(rxmatch(%sysfunc(rxparse($- ($a|_))),%quote(&_tmp2var_)))); %else %let _arrvareroot_=; %if (%quote(&_arrvarbroot_) eq %quote(&_arrvareroot_)) %then %do; %do _locali_=&_arrvarbeg_ %to %eval(&_arrvarend_-1); %if (%quote(&_convar_) eq) %then %let _convar_=%trim(%left(&_arrvarbroot_))%trim(%left(&_locali_)); %else %let _convar_=%trim(%quote(%left(%quote(&_convar_))))%quote(&_vardlm_)%trim(%left(&_arrvarbroot_))%trim(%left(&_locali_)); %end; %end; %else %do; %if (%quote(&_convar_) eq) %then %let _convar_=%trim(%quote(%left(%quote(&_tmp1var_)))); %else %let _convar_=%trim(%quote(%left(&_convar_)))%quote(&_vardlm_)%trim(%quote(%left(%quote(&_tmp1var_)))); %put ==> Alert! Variable name &_tmp1var_ and &_tmp2var_ do not have the same pattern!; %end; %end; %else %do; %if (%quote(&_convar_) eq) %then %let _convar_=%trim(%quote(%left(%quote(&_tmp1var_)))); %else %let _convar_=%trim(%quote(%left(%quote(&_convar_))))%quote(&_vardlm_)%trim(%quote(%left(%quote(&_tmp1var_)))); %put ==> Alert! Variable name &_tmp2var_ does not have a numeric suffix!; %end; %end; %else %do; %if (%quote(&_convar_) eq) %then %let _convar_=%trim(%quote(%left(%quote(&_tmp1var_)))); %else %let _convar_=%trim(%quote(%left(%quote(&_convar_))))%quote(&_vardlm_)%trim(%quote(%left(%quote(&_tmp1var_)))); %put ==> Alert! No variable names are provided after &_tmp1var_ -!; %end; %end; %else %do; %if (%quote(&_convar_) eq) %then %let _convar_=%trim(%quote(%left(%quote(&_tmp1var_)))); %else %let _convar_=%trim(%quote(%left(%quote(&_convar_))))%quote(&_vardlm_)%trim(%quote(%left(%quote(&_tmp1var_)))); %put ==> Alert! Variable name &_tmp1var_ does not have a numeric suffix!; %end; %end; %end; %let syspbuff=%trim(%quote(%left(%quote(&_convar_))))%quote(&_vardlm_)%trim(%quote(%left(%quote(&syspbuff)))); %end; /*End of change*/ %let _jvar_=0; %do %while(%length(%quote(%qscan(%quote(&syspbuff), %eval(&_jvar_+1), %quote(&_vardlm_))))); %let _jvar_=%eval(&_jvar_+1); %let _varj_=%qscan(%quote(&syspbuff), &_jvar_, %quote(&_vardlm_)); %let _varj_=%sysfunc(translate(%bquote(&_varj_), '(', 'À', ')', 'Á', ',', '´', ' ', '®')); %if (%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(&_varj_))))), %str(%())) and (not %index(%quote(%upcase(%sysfunc(compress(%quote(&_varj_))))),%str(LABEL=))) %then %do; %let _varj_=&_varj_ label="&_varj_"; %end; %if (%quote(&_jvar_) eq 1) %then %let _allvars_=&_varj_; %else %if (%length(&_varj_) gt 0) %then %let _allvars_=%trim(%bquote(%left(%bquote(&_allvars_))))%quote(&_vardlm_)&_varj_; %end; %end; &_allvars_ %mend listvar;